"""
脚本服务接口
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, List, Optional


class IScriptService(ABC):
    """
    脚本服务接口，定义脚本服务的功能
    """
    
    @abstractmethod
    def load_scripts(self, file_path: str) -> bool:
        """
        从文件加载脚本
        
        @param file_path: 脚本文件路径
        @return: 是否成功加载
        """
        pass
    
    @abstractmethod
    def save_scripts(self, file_path: str) -> bool:
        """
        保存脚本到文件
        
        @param file_path: 脚本文件路径
        @return: 是否成功保存
        """
        pass
    
    @abstractmethod
    def add_script(self, script: Dict[str, Any]) -> str:
        """
        添加脚本
        
        @param script: 脚本数据
        @return: 脚本 ID
        """
        pass
    
    @abstractmethod
    def update_script(self, script_id: str, script: Dict[str, Any]) -> bool:
        """
        更新脚本
        
        @param script_id: 脚本 ID
        @param script: 脚本数据
        @return: 是否成功更新
        """
        pass
    
    @abstractmethod
    def delete_script(self, script_id: str) -> bool:
        """
        删除脚本
        
        @param script_id: 脚本 ID
        @return: 是否成功删除
        """
        pass
    
    @abstractmethod
    def get_script(self, script_id: str) -> Optional[Dict[str, Any]]:
        """
        获取脚本
        
        @param script_id: 脚本 ID
        @return: 脚本数据，如果不存在则返回 None
        """
        pass
    
    @abstractmethod
    def get_all_scripts(self) -> List[Dict[str, Any]]:
        """
        获取所有脚本
        
        @return: 脚本列表
        """
        pass
    
    @abstractmethod
    def find_matching_script(self, content: str) -> Optional[Dict[str, Any]]:
        """
        查找匹配的脚本
        
        @param content: 内容
        @return: 匹配的脚本，如果没有匹配则返回 None
        """
        pass
    
    @abstractmethod
    def configure(self, config: Dict[str, Any]) -> None:
        """
        配置脚本服务
        
        @param config: 配置字典
        """
        pass